package thread;

/**
 * Thread类中的属性:
 *
 * isDaemon()   是否是后台进程
 * t1,t2默认都是前台进程,即使main结束,他俩也不会退出,都执行完才退出
 * 但是后台进程在main结束后就退出,他俩被强行终止
 *
 * isAlive()    是否存活
 * start执行之前就是false,之后就是true
 */

/**
 * start()方法与run()方法区别:
 * run只是单纯得描述了任务的内容,在main中创建就是运行在main线程中,从前到后运行
 * start则是一个特殊的方法,内部会在系统中创建线程
 */

public class TestDemo4 {

    public static void main1(String[] args) {
        Thread t = new Thread(() -> {
            //System.out.println(this.getName());//Runnable接口没有name属性
            //所以在Runnable接口中想要获取名字只能用currentThread()
            System.out.println(Thread.currentThread().getName());
        });
        t.start();
        Thread t2 = new Thread(){
            @Override
            public void run() {
                System.out.println(this.getName());//Thread类才有name属性
            }
        };
        System.out.println(Thread.currentThread().getName());
    }

    public static void main(String[] args) {
        //线程也可以用构造方法去取名,再jconsole中观察
        Thread t1 = new Thread(() ->{
            while (true){
                System.out.println("thread1");
                try {
                    Thread.sleep(500);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }, "thread t1");
        t1.start();

        Thread t2 = new Thread(() ->{
            while (true){
                System.out.println("thread2");
                try {
                    Thread.sleep(500);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }, "thread t2");
        t2.start();
    }
}
